Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - [VB6] Aiuto  a velocizzare codice di ricerca
Forum - Visual Basic 6 - [VB6] Aiuto a velocizzare codice di ricerca

Avatar
magicolotto (Normal User)
Expert


Messaggi: 338
Iscritto: 21/01/2008

Segnala al moderatore
Postato alle 6:36
Venerdì, 27/04/2012
Ciao ed  un ben ritrovati  a tutti....
Come da titolo  avrei necessità  di velocizzare un codice che agisce  su un archivio acces..
Questo ricava frequeza e ritardi ( storico  ed attuale ) di  tutti gli ambi sul  10 e lotto 5 minuti...
ci sono circa 190 mila estrazioni
ogni estrazione  è composta da  20 numeri ( vedi lo spot di Bisio in tv :)

Il codice che sto per  mostrarvi funziona abbastanza bene , però è lentissimoo
e  vorrei  col vostro aiuto velocizzarlo....
ecco il codice

DOPO  AVER APERTO LA CONNESSIONE AL DB
Codice sorgente - presumibilmente Delphi

  1. rs.MoveFirst  
  2.   For c = 1 To 89
  3.    For v = c + 1 To 90 ' ricava tutti gli ambi su 90 numeri
  4.  
  5.            freq = 0
  6.            rit = 0
  7.            rit_max = 0
  8.            rit_min = rs.RecordCount
  9.            
  10.            rs.MoveFirst
  11. Do Until rs.EOF
  12. trovato = 0
  13.      DoEvents
  14.       For P = 1 To 19
  15.       DoEvents
  16.          For q = P + 1 To 20 ' ricavo gli ambi usciti  sull'estrazione
  17.          DoEvents
  18.  
  19.          DoEvents
  20.          comb(P) = rs("n" & P)
  21.         comb(q) = rs("n" & q)
  22.  
  23.  n1 = c
  24.  n2 = v ' ambi sui 90 numeri
  25.   ' controllo se  sono presenti
  26. If (comb(P) = n1 And comb(q) = n2) Or (comb(P) = n2 And comb(q) = n1) Then
  27.                   dt = rs("Data")
  28.                   id = rs("concorso")
  29.                  freq = freq + 1
  30.                  trovato = 1
  31.                   DoEvents
  32.            End If
  33.            
  34.          Next q
  35.        Next P
  36.  
  37. 'INIZIO CALCOLO DEL RITARDO STORICO
  38.         If trovato = 0 Then
  39.             rit = rit + 1
  40.             If rit >= rit_max Then
  41.                 rit_max = rit
  42.                 data_max = rs("Data")
  43.             ElseIf rit <= rit_min Then
  44.                 rit_min = rit
  45.                 data_min = rs("Data")
  46.             End If
  47.         Else
  48.             rit = 0
  49.         End If
  50. 'FINE CALCOLO DEL RITARDO STORICO
  51.  
  52. rs.MoveNext
  53. Loop
  54. 'INSERISCO NELLA LISTA  I RISULTATI
  55.        contlista = contlista + 1
  56.        List3.AddItem contlista & "°" & " AMBO : " & n1 & " - " & n2 & " ---> " & "FQR: " & CStr(freq) & " - " & "RIT-ATT: " & CStr(rit) & " - " & "RIT-MAX: " & CStr(rit_max) & " - " & data_max '& " - " & " Assente dal " & " - " & " Posizione numeri : " & comb(P() & " - " & q
  57.         Next v
  58.  Next c
  59.  
  60. rs.Close
  61. MsgBox "fine"


Ultima modifica effettuata da magicolotto il 27/04/2012 alle 9:38
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 9:21
Venerdì, 27/04/2012

ma c'è ancora qualcuno che cerca con la statistica di prevedere il risultato di un processo aleatorio? imbarazzante...

PM Quote
Avatar
magicolotto (Normal User)
Expert


Messaggi: 338
Iscritto: 21/01/2008

Segnala al moderatore
Postato alle 10:47
Venerdì, 27/04/2012
Si lo so è imbarazzante..
ma resta esclusivamente un gioco  ed  un passatempo
Spero comunque che qualcuno mi aiuti


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6405
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:02
Venerdì, 27/04/2012
Non demordi ... era dai tempi di html.it che non ti vedevo ...

A parte quanto ti ha ricordato HeDo (che tante volte ti ho detto anch'io), non capisco

1) tutti quei DoEvents ...

2) perché

rit_min = rs.RecordCount

sia all'interno del ciclo




Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
magicolotto (Normal User)
Expert


Messaggi: 338
Iscritto: 21/01/2008

Segnala al moderatore
Postato alle 11:15
Venerdì, 27/04/2012
No, non demordo... :)  che testa dura che sono :rotfl:
tutti quei DoEvents e  che alcune volte   in base alle prestazioni del pc, va in crash , per  evitare la schermata bianca del form durante  l'elaborazione..

rit_min = rs.RecordCount
intendi che sia all'interno del  
Do Until rs.EOF

posso provare , ma  non credo che cambi qualcosa nelle prestezioni..

grazie della risposta


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6405
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:33
Venerdì, 27/04/2012
Testo quotato

Postato originariamente da magicolotto:

tutti quei DoEvents e  che alcune volte   in base alle prestazioni del pc, va in crash , per  evitare la schermata bianca del form durante  l'elaborazione..



Ne basta uno, magari nel ciclo più interno ... gli altri eliminali ...

Testo quotato

rit_min = rs.RecordCount



Se il numero rit_min lo ottieni una volta ed è sempre quello, perché calcolarlo centinaia di volte?

Testo quotato

posso provare , ma  non credo che cambi qualcosa nelle prestezioni..



E' "anche" quello ...

Ovviamente, il resto del codice andrebbe rivisto.

Una cosa fondamentale sarebbe utilizzare

array

in memoria e non controlli.

E anche cercare di capire se quello che chiedi non sia ottenibile direttamente con una query al DB.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
magicolotto (Normal User)
Expert


Messaggi: 338
Iscritto: 21/01/2008

Segnala al moderatore
Postato alle 11:42
Venerdì, 27/04/2012
rit_min
lo posso  anche eliminare , anche perchè in effetti è sempre  = 1
a prescindere  non mi serve

ok per doevents

per quanto riguarda  il resto
array oppure direttamente una query al db
era appunto la mia domanda iniziale, su come dovrei fare ....


PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 882
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 12:53
Venerdì, 27/04/2012

Gli Ambi sono 4005.......


If ok Then GOTO Avanza else GOTO Inizia

PM Quote
Avatar
magicolotto (Normal User)
Expert


Messaggi: 338
Iscritto: 21/01/2008

Segnala al moderatore
Postato alle 13:08
Venerdì, 27/04/2012
si certo
sono 4005

PM Quote